import MyArray from './array';

interface Queue<E> {
    getSize() : number;
    isEmpty() : boolean;
    enqueue(e: E) : void;
    dequeue() : E;
    getFront(): E;
}

export default class ArrayQueue<E> implements Queue<E> {
    private array: MyArray<E>;
    constructor(capacity: number = 1000){
        this.array = new MyArray<E>(capacity);
    }
    
    /**
     * 得到队列长度.
     * @returns number 队列长度
     */
    public getSize() : number {
        return this.array.getSize();
    }

    /**
     * 查询队列是否为空.
     * @returns boolean
     */
    public isEmpty() : boolean {
        return this.array.isEmpty();
    }

    /**
     * 入队
     * @param E 需要添加额元素.
     * @return void
     */
    public enqueue(e: E) : void {
        this.array.addLast(e);
    }

    /**
     * 出队并返回出队元素.
     * @returns E 出队元素
     */
    public dequeue() : E{
        return this.array.removeFirst();
    }

    /**
     * 查看头部元素
     * @returns E 头部元素
     */
    public getFront() : E {
        return this.array.getFirst()
    }

        /**
     * 打印队列信息.
     * @returns string 打印的字符串
     */
    public toString(): string {
        let res = '';
        for (let i = 0; i < this.array.getSize(); i++) {
            res += this.array.get(i);
        }
        return res;
    }
   
}

